#ifndef CDATALINKUTIL_H_
#define CDATALINKUTIL_H_

#include <sstream>
#include <memory>
#include "IBaseDatalink.h"

namespace zl
{
namespace zlbase
{

/// \brief 根据设备参数生成origin字符串
///
/// \param[in] opt 链路配置参数
/// \return 生成的字符串
std::string generate_datalink_origin(const DatalinkOption& opt);

/// \brief 计算异或校验和
///
/// \param[in] buff 需要计算的数据
/// \param[in] length 需要计算的数据的长度
/// \return 异或校验和结果
uint8_t generate_bcc_checksum(const unsigned char* buff, size_t len);

/// \brief 自动锁定解锁链路对象
class CAutoDatalinkLocker
{
public:
	CAutoDatalinkLocker(std::shared_ptr<IBaseDatalink> ptr) : ptr_(ptr)
	{
		ptr_->AcquireOwnership(true);
	}
	~CAutoDatalinkLocker()
	{
		ptr_->AcquireOwnership(false);
	}

private:
	std::shared_ptr<IBaseDatalink> ptr_;
};

}
} // namespace zl

#endif // CDATALINKUTIL_H_